#include "bsp.h"
#include "bsp_config.h"

static volatile uint32_t enc1_count = 0;
static volatile uint32_t enc2_count = 0;


void motor_enc1_INTCallback()
{
    enc1_count++;
}

void motor_enc2_INTCallback()
{
    enc2_count++;
}

void motor_enc_MeasureCallback()
{
    motor_1.speed = enc1_count;
    motor_2.speed = enc2_count;

    enc1_count = 0;
    enc2_count = 0;
}


void TIMER_0_INST_IRQHandler(void)
{
    switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST))
    {
        case DL_TIMER_IIDX_ZERO:
            motor_enc_MeasureCallback();
            break;
        default:
            break;
    }
}

void GROUP1_IRQHandler()
{
    uint32_t enc1 = DL_GPIO_getEnabledInterruptStatus(ENCODER_GROUP_M1_A_PORT, ENCODER_GROUP_M1_A_PIN);
    uint32_t enc2 = DL_GPIO_getEnabledInterruptStatus(ENCODER_GROUP_M2_A_PORT, ENCODER_GROUP_M2_A_PIN);
    if (enc1 & ENCODER_GROUP_M1_A_PIN)
    {
        motor_enc1_INTCallback();
    }
    if (enc2 & ENCODER_GROUP_M2_A_PIN) 
    {
        motor_enc2_INTCallback();
    }
    DL_GPIO_clearInterruptStatus(ENCODER_GROUP_M1_A_PORT, ENCODER_GROUP_M1_A_PIN);
    DL_GPIO_clearInterruptStatus(ENCODER_GROUP_M2_A_PORT, ENCODER_GROUP_M2_A_PIN);
}

void DELAY_TIMER_INST_IRQHandler()
{
    // switch (DL_TimerA_getPendingInterrupt(DELAY_TIMER_INST))
    // {
    //     case DL_TIMER_IIDX_ZERO:
    //         turn_left();
    //         break;
    //     default:
    //         break;
    // }
}
